package com.tensquare.base.controller;

import com.tensquare.base.pojo.Label;
import com.tensquare.base.service.LabelService;
import entity.PageResult;
import entity.Result;
import entity.StatusCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @description
 * @author: xu1
 **/

@RestController//涉及到 对象转json（比如返回 实体对象Result 转成json给前端）
// 不需要再写responsebody，它主要包括@ResponseBody @Controller
//它对应的是  给前端返回的过程
//接受前端的 json数据转对象  对应的是@RequestBody 写在方法上
@CrossOrigin//跨域-微服务 跨域调用 用这个。
@RequestMapping("/label")
@RefreshScope//bus 的更新默认是 只更新 配置文件中 框架配置的改变，自己自定义的配比比如随便的ip，改变并不会更新，加上这个注解可以解决。
public class LabelController {

    @Autowired
    private LabelService labelService;

    @Value("${ip}")
    private String ip;

    @RequestMapping(method = RequestMethod.GET)
    public Result findAll() {
        System.out.println(ip);
        return new Result(true, StatusCode.OK, "查询成功", labelService.findAll());
    }

    //占位符里面的值{labelId} 对应的取出@PathVariable 形参名字保持一致labelId，不一致还需要指定对应
    @RequestMapping(value = "/{labelId}", method = RequestMethod.GET)
    public Result findById(@PathVariable String labelId) {
//        int i= 1/0;
        return new Result(true, StatusCode.OK, "查询成功", labelService.findById(labelId));
    }

    @RequestMapping(method = RequestMethod.POST)
    public Result save(@RequestBody Label label) {
        labelService.save(label);
        return new Result(true, StatusCode.OK, "添加成功");
    }

    @RequestMapping(value = "/{labelId}", method = RequestMethod.PUT)
    public Result update(@PathVariable String labelId, @RequestBody Label label) {
        labelService.update(label);
        return new Result(true, StatusCode.OK, "更新成功");
    }

    @RequestMapping(value = "/{labelId}", method = RequestMethod.DELETE)
    public Result deleteById(@PathVariable String labelId) {
        labelService.delete(labelId);
        return new Result(true, StatusCode.OK, "删除成功");
    }


    //@RequestBody也可以 自动json转化为map 看你怎么定义，转对象方便点，不需要记key
    @RequestMapping(value = "/search", method = RequestMethod.POST)
    public Result findSearch(@RequestBody Label label) {
        List<Label> list = labelService.findSearch(label);
        return new Result(true, StatusCode.OK, "查询成功", list);
    }

    //@RequestBody也可以 自动json转化为map 看你怎么定义，转对象方便点，不需要记key
    @RequestMapping(value = "/search/{page}/{size}", method = RequestMethod.POST)
    public Result pageQuery(@RequestBody Label label, @PathVariable int page, @PathVariable int size) {
        //页码 页大小。
        //用的int接受参数，string也行，随意，string后边得转int
        //int的好处：初始值是0 ，虽然初始值0没啥用，但是 假设 分页第一次查询 可能没给这俩page size 如果是integer的话会空指针异常

        //Page这个page是import org.springframework.data.domain.Page; spring的 分页类
        Page<Label> pageData = labelService.pageQuery(label, page, size);
        return new Result(true, StatusCode.OK, "查询成功", new PageResult<Label>(pageData.getTotalElements(), pageData.getContent()));
//        long totalElements = pageData.getTotalElements();//总记录数
//        List<Label> content = pageData.getContent();//返回 数据 内容
//        int totalPages = pageData.getTotalPages();//返回总页数
    }



}
